package org.opens.attr.util;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
 * 将spring属性装配到静态字段上; @Lazy(value = false)必不可少, 因为有些情况下bean属于懒加载, 懒加载时, spring启动时将不会执行InitializingBean
 * 接口的方法.
 *
 * @author by zhangyuming
 * @date 2022/10/25
 */
@Component
@Lazy(value = false)
public class AttrUtil implements InitializingBean {

    /**
     * 当前bean初始化完成后会进行这个方法的调用
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        AttrUtil.id = this.idTemp;
        AttrUtil.name = this.nameTemp;
    }

    public static String id;

    public static String name;

    public static void utilMethod() {
        // 此时, 在静态方法中就可以使用配置文件中所配置的变量了.
    }

    /**
     * 注解@Value("${attr.id}")这种方式是不能给静态字段注入属性的, 因此, 通过给动态字段注入属性和InitializingBean接口的后初始化方式给静态
     * 字段注入属性.
     */
    @Value("${attr.id}")
    private String idTemp;

    @Value("${attr.name}")
    private String nameTemp;

}
